package com.huahai.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.huahai.common.DeleteRequest;
import com.huahai.pojo.dto.comment.CommentAddDTO;
import com.huahai.pojo.dto.comment.CommentQueryDTO;
import com.huahai.pojo.entity.Comment;
import com.huahai.pojo.entity.User;
import com.huahai.pojo.vo.comment.CommentVO;

import javax.servlet.http.HttpServletRequest;

/**
* @author huahai
* @description 针对表【comment(评论)】的数据库操作Service
* @createDate 2025-08-26 15:32:53
*/
public interface CommentService extends IService<Comment> {

    /**
     * 添加评论
     * @param commentAddDTO 添加评论参数
     * @param loginUser 登录用户
     * @return Long 添加的评论id
     */
    Long addComment(CommentAddDTO commentAddDTO, User loginUser);

    /**
     * 删除评论
     * @param deleteRequest 删除参数
     * @param loginUser 登录用户
     * @return Boolean 删除成功与否
     */
    Boolean deleteComment(DeleteRequest deleteRequest, User loginUser);

    /**
     * 根据 id 获取单条评论 (管理员)
     * @param commentQueryDTO 评论查询参数
     * @param loginUser 登录用户
     * @return CommentVO
     */
    Comment getCommentById(CommentQueryDTO commentQueryDTO, User loginUser);

    /**
     * 根据 id 获取单条评论 （脱敏）
     * @param commentQueryDTO 评论查询参数
     * @param loginUser 登录用户
     * @return CommentVO
     */
    CommentVO getCommentVOById(CommentQueryDTO commentQueryDTO, User loginUser, HttpServletRequest request);

    /**
     * 分页获取评论列表 （管理员）
     * @param commentQueryDTO 分页参数
     * @param loginUser 登录用户
     * @return Page<Comment> 分页后的评论列表
     */
    Page<Comment> getCommentPage(CommentQueryDTO commentQueryDTO, User loginUser);

    /**
     * 分页获取评论列表  (脱敏)
     * @param commentQueryDTO 分页参数
     * @param loginUser 登录用户
     * @return Page<Comment> 分页后的评论列表
     */
    Page<CommentVO> getCommentVOPage(CommentQueryDTO commentQueryDTO, User loginUser, HttpServletRequest request);

    /**
     * comment类型转换脱敏（单个评论）
     * @param comment 评论对象
     * @param request 请求
     * @return CommentVO
     */
    CommentVO getCommentVO(Comment comment, HttpServletRequest request);

    /**
     * 分页获取评论封装
     * @param commentPage 分页参数
     * @param request 请求
     * @return Page<CommentVO> 分页后的脱敏评论列表
     */
    Page<CommentVO> getCommentVOPage(Page<Comment> commentPage, HttpServletRequest request);

    /**
     * 封装评论查询条件QueryWrapper
     * @param commentQueryDTO 评论查询条件
     * @return QueryWrapper<Comment>
     */
    QueryWrapper<Comment> getQueryWrapper(CommentQueryDTO commentQueryDTO);

    /**
     * 评论基本校验
     * @param commentAddDTO 评论对象
     */
    void validAddComment(CommentAddDTO commentAddDTO);

    /**
     * 评论查询参数校验
     * @param commentQueryDTO
     * @return
     */
    void validQueryComment(CommentQueryDTO commentQueryDTO);

    /**
     * 检查评论是否被当前用户点赞
     * @param commentVO 评论信息
     * @param loginUser 登录用户
     * @return 是否被当前用户点赞
     */
    Boolean checkCommentLiked(CommentVO commentVO, User loginUser);

}
